package aspirateur;

public class ChercheurDeBalise {
	
	public ChercheurDeBalise() {
		
	}
	
	public void chercherBalise(String _html, String balise, String attribut, String source, ListeDePages liste){
		
		String html = _html.toUpperCase();
		balise = balise.toUpperCase();
		attribut = attribut.toUpperCase();
		
		//s'il s'agit d'une balise link
		if (html.startsWith("<"+balise)){
	
			if (html.contains(attribut)){
				
				_html = _html.replace(attribut.toLowerCase(), attribut);
				
				//on r�cup�re la valeur de href
				int idx = html.indexOf(attribut);
				String src = _html.substring(idx);
				idx = src.indexOf("\"");
				src = src.substring(idx+1);
				idx = src.indexOf("\"");
				src = src.substring(0, idx);
				
				//si c'est une image li�e de mani�re absolue au site
				if (src.startsWith(source)){
					liste.ajouterPage(new Lien(src, 0));
					
				//si c'est un lien relatif du site	
				}else if (!src.toLowerCase().startsWith("http")) {
					
					//s'il y a un slash devant
					if (src.startsWith("/")){
						
						//on concat�ne la source au lien
						src = source+src;
						
						//on l'ajoute aux css � traiter
						liste.ajouterPage(new Lien(src, 0));
						
					}else{
						
						//on ajoute un slash entre la source et le lien
						src = source + "/" + src;
						
						//on ajoute le lien aux images � traiter
						liste.ajouterPage(new Lien(src, 0));
					}
				} //rq : on ne telecharge pas les images exterieures au site
				
				//on formate le HREF pour qu'il concorde au syst�me de fichiers
				src = GenerateurDeNom.genererNomRelatif(src, source);
						
				//on remplace la valeur de SRC par celle que l'on a format�e
				_html = _html.replaceAll(attribut+"=\".*\"",attribut+"=\""+src+"\"");
			}
		}
	}

	public String chercherHREF(String _html, int p, String source, ListeDePages pagesATraiter, ListeDePages pagesTraitees) {
		String html = _html.toUpperCase();
		
		//s'il s'agit d'une balise <a>
		if (html.startsWith("<A")){
			
			//et qu'elle contient bien l'attribut HREF
			if (html.contains("HREF")){
				
				_html = _html.replace("href", "HREF");
								
				//on r�cup�re la valeur du HREF
				int idx = html.indexOf("HREF");
				String href = _html.substring(idx);
				idx = href.indexOf("\"");
				href = href.substring(idx+1);
				idx = href.indexOf("\"");
				href = href.substring(0, idx);
				if (href.contains("#")){
					href = href.substring(0, href.indexOf("#"));
					if (href.isEmpty()) return _html;
				}
				
				//si ce n'est pas un lien javascript
				if (!html.contains("JAVASCRIPT")){
					
					//si c'est un lien absolu qui appartient au site
					if (href.startsWith(source)){
						pagesATraiter.ajouterPage(new Lien(href, p+1));
						
					//si c'est un lien relatif du site	
					}else if (!href.toLowerCase().startsWith("http")) {
						
						//s'il y a un slash devant
						if (href.startsWith("/")){
							
							//on concat�ne la source au lien
							href = source+href;
							
							//si la page n'a pas �t� trait�e auparavant
							if (!pagesTraitees.contient(href))
								//on l'ajoute aux pages � traiter
								pagesATraiter.ajouterPage(new Lien(href, p+1));
						}else{
							
							//on ajoute un slash entre la source et le lien
							href = source + "/" + href;
							
							//si la page n'a pas �t� trait�e auparavant
							if (!pagesTraitees.contient(href))
								//on ajoute le lien aux pages � traiter
								pagesATraiter.ajouterPage(new Lien(href, p+1));
						}						
						href = GenerateurDeNom.genererNomRelatif(href, source);
						href = GenerateurDeNom.ajouterExtensionHtml(href);

						
						
					}
				
				//on remplace la valeur de HREF par celle que l'on a format�e
				_html = _html.replaceAll("HREF=\".*\"", "HREF=\""+href+"\"");
				
				}
			}
				
		}
		return _html;
	}
}
